package 纯数组;

import java.util.Arrays;
import java.util.Comparator;

public class JZ45把数组排成最小的数 {

    /**
     * 输入一个非负整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个。
     *
     * 示例 1:
     * 输入: [10,2]
     * 输出: "102"
     * 示例 2:
     * 输入: [3,30,34,5,9]
     * 输出: "3033459"
     *  
     * 提示:
     * 0 < nums.length <= 100
     * 说明:
     * 输出结果可能非常大，所以你需要返回一个字符串而不是整数
     * 拼接起来的数字可能会有前导 0，最后结果不需要去掉前导 0
     */

    //直接对String[i]进行排序,会大的在前,小的在后
    //30和3 的比较,对于上述情况就不管用,所以需要新的比较想法: [i]+[j]比较[j][i]
    //303 330 就可以比较出结果了
    public String minNumber(int[] nums) {

        String[] strNums=new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            strNums[i]=String.valueOf(nums[i]);
        }

        Arrays.sort(strNums, (o1, o2) -> (o1+o2).compareTo(o2+o1));

        StringBuilder sb=new StringBuilder();

        for (String strNum : strNums) {
            sb.append(strNum);
        }

        return sb.toString();

    }

    public static void main(String[] args) {
        JZ45把数组排成最小的数 jz=new JZ45把数组排成最小的数();
        int[] arr={3,30,34,35,5,9};
        String result = jz.minNumber(arr);
        System.out.println(result);
    }

}
